package com.cmccgz.baselibrary.view;

import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.Window;
import android.view.WindowManager;
import android.widget.DatePicker;

import com.cmccgz.baselibrary.R;

import java.util.Calendar;

/**
 * 日期选择对话框
 */
public class DatePickerDialog {


    /**
     * 调用该方法创建并自动显示日期选择对话框（设置了可选择最小日期）
     *
     * @param context  上下文
     * @param title    标题
     * @param minDate  可选最小日期
     * @param listener 选择日期返回监听
     * @return 对话框
     */
    public static Dialog showDatePickerDialogWhitMinDate(Context context, String title, long minDate, DatePickerDialog.OnDateSetListener listener) {
        return showDatePickerDialog(context, title, minDate, 0, listener);
    }


    /**
     * 调用该方法创建并自动显示日期选择对话框（设置了可选择最大日期）
     *
     * @param context  上下文
     * @param title    标题
     * @param maxDate  可选最大日期
     * @param listener 选择日期返回监听
     * @return 对话框
     */
    public static Dialog showDatePickerDialogWhitMaxDate(Context context, String title, long maxDate, DatePickerDialog.OnDateSetListener listener) {
        return showDatePickerDialog(context, title, 0, maxDate, listener);
    }

    /**
     * 调用该方法创建并自动显示日期选择对话框（没有日期选择限制）
     *
     * @param context  上下文
     * @param title    标题
     * @param listener 选择日期返回监听
     * @return 对话框
     */
    public static Dialog showDatePickerDialog(Context context, String title, DatePickerDialog.OnDateSetListener listener) {
        return showDatePickerDialog(context, title, 0, 0, listener);
    }

  /*  *//**
     * 调用该方法创建并自动显示日期选择对话框（设置了可选择日期范围）
     *
     * @param context  上下文
     * @param title    标题
     * @param minDate  可选最小日期
     * @param maxDate  可选最大日期
     * @param listener 选择日期返回监听
     * @return 对话框
     *//*
    public static Dialog showDatePickerDialog(Context context, String title, long minDate, long maxDate, final DatePickerDialog.OnDateSetListener listener) {
        final DatePicker datePicker = (DatePicker) LayoutInflater.from(context).inflate(R.layout.layout_datapicker_spinner, null);
        Calendar calendar = Calendar.getInstance();
        datePicker.init(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), null);
        if (minDate != 0) {
            datePicker.setMinDate(minDate);
        }
        if (maxDate != 0) {
            datePicker.setMaxDate(maxDate);
        }
        AlertDialog.Builder builder = new AlertDialog.Builder(context, R.style.BottomDialog);
        builder.setTitle(title);
        builder.setView(datePicker);
        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                if (listener != null) {
                    listener.onDateSet(datePicker, datePicker.getYear(), datePicker.getMonth(), datePicker.getDayOfMonth());
                }
            }
        });

        AlertDialog dialog = builder.create();
        dialog.show();

        Window window = dialog.getWindow();
        window.setGravity(Gravity.BOTTOM);
        window.setWindowAnimations(R.style.dialogStyle);
        window.getDecorView().setPadding(0, 0, 0, 0);
        android.view.WindowManager.LayoutParams lp = window.getAttributes();
        lp.width = WindowManager.LayoutParams.MATCH_PARENT;
        lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
        window.setAttributes(lp);

        return dialog;
    }*/
    /**
     * 调用该方法创建并自动显示日期选择对话框（设置了可选择日期范围）
     *
     * @param context  上下文
     * @param title    标题
     * @param minDate  可选最小日期
     * @param maxDate  可选最大日期
     * @param listener 选择日期返回监听
     * @return 对话框
     */
    public static Dialog showDatePickerDialog(Context context, String title, long minDate, long maxDate, final DatePickerDialog.OnDateSetListener listener) {
        return showDatePickerDialog(context,title,minDate,maxDate,-1,listener);
    }

    /**
     * 调用该方法创建并自动显示日期选择对话框（设置了可选择日期范围）
     * @param context  上下文
     * @param title    标题
     * @param minDate  可选最小日期
     * @param currentDate 当前日期
     * @param listener 回调
     * @return 对话框
     */
    public static Dialog showDateWithMinAndCurrent(Context context, String title, long minDate,long currentDate, final DatePickerDialog.OnDateSetListener listener) {
        return showDatePickerDialog(context,title,minDate,0,currentDate,listener);
    }
    /**
     * 调用该方法创建并自动显示日期选择对话框（设置了可选择日期范围）
     * @param context  上下文
     * @param title    标题
     * @param maxDate  可选最大日期
     * @param currentDate 当前日期
     * @param listener 回调
     * @return 对话框
     */
    public static Dialog showDateWithMaxAndCurrent(Context context, String title, long maxDate,long currentDate, final DatePickerDialog.OnDateSetListener listener) {
        return showDatePickerDialog(context,title,0,maxDate,currentDate,listener);
    }
    /**
     * 调用该方法创建并自动显示日期选择对话框（设置了可选择日期范围）
     *
     * @param context  上下文
     * @param title    标题
     * @param minDate  可选最小日期
     * @param maxDate  可选最大日期
     * @param listener 选择日期返回监听
     * @return 对话框
     */
    public static Dialog showDatePickerDialog(Context context, String title, long minDate, long maxDate,long currentDate, final DatePickerDialog.OnDateSetListener listener) {
        final DatePicker datePicker = (DatePicker) LayoutInflater.from(context).inflate(R.layout.layout_datapicker_spinner, null);
        Calendar calendar = Calendar.getInstance();
        if (currentDate>0) {
            calendar.setTimeInMillis(currentDate);
        }
        datePicker.init(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), null);
        if (minDate != 0) {
            datePicker.setMinDate(minDate);
        }
        if (maxDate != 0) {
            datePicker.setMaxDate(maxDate);
        }
        AlertDialog.Builder builder = new AlertDialog.Builder(context, R.style.BottomDialog);
        builder.setTitle(title);
        builder.setView(datePicker);
        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                if (listener != null) {
                    listener.onDateSet(datePicker, datePicker.getYear(), datePicker.getMonth(), datePicker.getDayOfMonth());
                }
            }
        });

        AlertDialog dialog = builder.create();
        dialog.show();

        Window window = dialog.getWindow();
        window.setGravity(Gravity.BOTTOM);
        window.setWindowAnimations(R.style.dialogStyle);
        window.getDecorView().setPadding(0, 0, 0, 0);
        android.view.WindowManager.LayoutParams lp = window.getAttributes();
        lp.width = WindowManager.LayoutParams.MATCH_PARENT;
        lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
        window.setAttributes(lp);

        return dialog;
    }
    /**
     * 计算对应年份的最大日期11月31日距离 1, 1, 1970, 00:00:00 毫秒数
     *
     * @param year 年份
     * @return 毫秒数
     */
    public static long getDateByMaxYear(int year) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(year, 11, 31);
        return calendar.getTimeInMillis();
    }

    /**
     * 计算对应年份的最小日期1月1日距离 1, 1, 1970, 00:00:00 毫秒数
     *
     * @param year 年份
     * @return 毫秒数
     */
    public static long getDateByMinYear(int year) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(year, 0, 1);
        return calendar.getTimeInMillis();
    }


    /**
     * 选择日期返回监听
     */
    public interface OnDateSetListener {
        void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth);
    }
}
